package com.xinzhitong.www.provider;

import com.xinzhitong.www.utils.CamelCase;
import org.apache.ibatis.jdbc.SQL;

import java.lang.reflect.Field;

/**
 * 更新操作sql提供器
 *
 * @author 徐鑫
 */
public class UpdateSQLProvider extends BaseSQLProvider {

    /**
     * 获取更新的sql语句
     *
     * @param table     表名
     * @param source    更新的数据源（属性需与字段呈驼峰关系）
     * @param condition sql中可直接使用的条件（如：a=1 and b is not null）
     * @return sql语句
     */
    public String getSQLOfUpdate(String table, Object source, String condition) {
        SQL sql = new SQL();
        sql.UPDATE(table);
        Class cls = source.getClass();
        for (Field field : cls.getDeclaredFields()) {
            field.setAccessible(true);
            String fieldNameOfTable = CamelCase.reCamelCase(field.getName());
            try {
                Object value = field.get(source);
                sql.SET(fieldNameOfTable + "=" + sqlValueOf(value));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NullPointerException e) {
                sql.SET(fieldNameOfTable + "=" + "null");
            }
        }

        sql.WHERE(" " + condition + " ");
        return sql.toString();
    }

}
